package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOPais;
import pe.com.cotelasa.scp.dao.IDAOUbigeo;
import pe.com.cotelasa.scp.dominio.service.IServicioUbigeo;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.Pais;
import pe.com.cotelasa.scp.entidad.Ubigeo;

/**
 *
 * @author zer0
 */
@Service
public class ServicioUbigeoImpl implements IServicioUbigeo {

    @Inject
    private IDAOPais daoPais;
    @Inject
    private IDAOUbigeo daoUbigeo;

    @Override
    public Collection<Pais> listarTodosPaises() throws ServiceException {
        try {
            return daoPais.listarTodos(Pais.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Pais> listarPaisesActivos() throws ServiceException {
        try {
            return daoPais.listarActivos(Pais.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Pais conseguirPaisPorId(Integer id) throws ServiceException {
        try {
            return daoPais.obtenerEntidadPorId(Pais.class, id);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Pais obtenerPaisPorNombre(String nombrePais) throws ServiceException {
        try {
            return daoPais.obtenerPaisPorNombre(nombrePais);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Ubigeo> listarCiudadesPorPais(Pais pais) throws ServiceException {
        try {
            return daoUbigeo.listarCiudadesPorPais(pais);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Ubigeo> listarTodosUbigeosPorCodigo(Ubigeo ubigeo) throws ServiceException {
        Map<String, Object> parametros = new HashMap<String, Object>();
        parametros.put("codigo", ubigeo.getCodigo());
        try {
            return daoUbigeo.obtenerColeccionEntidadPorFiltros(Ubigeo.class, parametros);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Ubigeo obtenerUbigeoPorNombre(String nombreUbigeo) throws ServiceException {
        try {
            return daoUbigeo.obtenerUbigeoPorNombre(nombreUbigeo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Ubigeo obtenerUbigeoPorCodigo(Ubigeo ubigeo) throws ServiceException {
        try {
            return daoUbigeo.obtenerUbigeoPorCodigo(ubigeo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
